Skip to content

fix(webhooks)!: forward-port AdCP 3.2 challenge payload - #1899

Merged
rachitm022 merged 1 commit into
nextfrom
rmatani/ai-21266-fix-python-sdk-webhook-challenge-payload
Nov 13, 2026
Merged

rachitm022 merged 1 commit into
nextfrom
rmatani/ai-21266-fix-python-sdk-webhook-challenge-payload

Conversation

@rachitm022

@rachitm022 rachitm022 commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • forward-port the AdCP 3.2 webhook challenge schema fix from fix(webhooks)!: comply with AdCP 3.2 challenge schema #1897 onto next
  • require and validate seller_agent_url, delivery_auth, and event_types while preserving deprecated Bearer/HMAC delivery metadata
  • preserve next signing-profile selection and require a sender capable of the configured profile
  • validate generated payloads against the cached AdCP 3.2 schema without weakening receiver validation

This must land before release PR #1892 so 10.0.0b16 contains the fix.

BREAKING CHANGE: Webhook challenge helpers now require seller_agent_url and event_types, and proof challenges require an RFC 9421 sender.

Refs AI-21266.

Verification

  • targeted webhook/conformance suite: 93 passed
  • Ruff: passed
  • mypy (SDK and reporting storage): passed
  • strict adopter mypy fixtures: passed
  • Pyright fixtures: passed (67 checked, 11 excluded)
  • full pytest: 21,986 passed, 2,983 skipped; six unchanged reporting-interop tests cannot run on macOS because they require Linux /etc/os-release or /proc and will be exercised by Linux CI

Source

Forward-port of the implementation reviewed and merged in #1897, with conflict resolution for the AdCP 3.3 signing-profile support already present on next.

BREAKING CHANGE: Webhook challenge helpers now require seller_agent_url and event_types, and proof challenges require an RFC 9421 WebhookSender; pass legacy delivery authentication alongside that sender.

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve.

Clean forward-port of #1897. The reviewer found no Critical/High/Medium findings.

Checks that passed review:

  • Breaking marker is correct: fix(webhooks)!: carries the breaking signal for public exports challenge_webhook_destination and create_webhook_challenge_payload (snapshot lines 689/695), both of which gain required params (seller_agent_url/event_types) and challenge_webhook_destination now requires sender. Satisfies the mandatory semver-signal gate.
  • Wire-shape fidelity: payload at webhooks.py:301-309 matches core/webhook-challenge.json 3.3.0-beta.5 exactly.
  • No credential leak: legacy credentials are fingerprinted, not transmitted (asserted at tests/test_webhook_challenge.py:647); dropping _validate_header_value on the legacy path is safe since the credential never reaches a header.
  • Schema validation fails closed (RuntimeError on missing validator); default token generation stays conformant with the schema pattern.

Decision-rule walkthrough: no critical/high findings (row 1 n/a); gated_paths false (row 2 n/a); high_risk reasons are all (modified) with no medium findings, so rows 3-5 do not fire; no prior decision (row 6 n/a); no no-auto-approve team match (row 7 n/a); zero medium findings (row 8 n/a). Falls through to row 9 → approve. The high_risk flag on src/adcp/signing/** is a heuristic LOOK signal only; modifications with no medium-or-higher findings are presumed safe.

@rachitm022
rachitm022 merged commit 8fb891c into next Nov 13, 2026
77 of 78 checks passed
@rachitm022
rachitm022 deleted the rmatani/ai-21266-fix-python-sdk-webhook-challenge-payload branch November 13, 2026 14:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant